home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
DESQVIEW
/
QTECH527.ARJ
/
XDI.TEC
< prev
next >
Wrap
Text File
|
1991-03-12
|
9KB
|
169 lines
ID:XD XDI Specification for DESQview
Quarterdeck Technical Note #182
by Daniel Travison
Q: How can my device driver/TSR work better with DESQview?
DESQview's External Device Interface
DESQview version 2.26 (and above), can issue informative messages
to third party software in order for that software to monitor
certain DESQview operations such as starting a task or swapping
out a process. These messages can be useful for determining when
to allocate/deallocate resources (e.g., memory) on a process by
process basis, communicating with tasks running within DESQview,
rescheduling tasks, tracking DESQview's task switching, etc.
DESQview provides this information through the External Device
Interface (XDI) - Quarterdeck's specification for communicating
with external drivers.
An XDI driver may be implemented either as a DOS device driver
(loaded by CONFIG.SYS), a Terminate and Stay Resident program
(TSR) loaded before or after DESQview, or as a DESQview shared
program (shared among several processes). For the rest of this
documentation, the term 'driver' will normally refer to a program
that uses the XDI irrespective of its method of implementation
(device driver, TSR or shared program). Also, any number of XDI
drivers can be loaded. When DESQview starts, it simply attaches
itself to the XDI chain and starts sending XDI messages to to
previously loaded XDI drivers.
Within the XDI, there are 15 subfunctions (messages). Fourteen
of these messages inform the driver what action DESQview has just
performed or is about to perform. Your driver can choose to
ignore the message and pass it on to the next driver in the
chain, perform/schedule work based on the message, or save
information for later use (e.g., the current mapping context).
XDI_CHECK_PRESENCE Check for XDI driver presence
XDI_RESERVED_SUBFUNC XDI driver custom subfunction
XDD_START_DV DV system initialization complete
XDI_END_DV DV system termination
XDI_START_PROC DV process creation
XDI_END_PROC DV process termination
XDI_START_TASK Task creation
XDI_END_TASK Task termination
XDI_SAVE_STATE Task state save
XDI_RESTORE_STATE Task state restore
XDI_KEYBOARD Change of keyboard focus
XDI_PROCESS_DVP Processing of DVP file complete
XDI_SWAPPING_OUT Swap out of DV process
XDI_SWAPPED_IN Swap in of DV process
XDI_FAILED_DVP DV process creation failure
An XDI driver can schedule second level handlers to make API
calls, collect data, transfer data, dispatch tasks, perform
initialization/termination when DESQview is started and quit.
The fifteenth subfunction, XDI_RESERVED_SUBFUNC provides a method
for applications to communicate with your driver without needing
to grab an additional interrupt vector. Additionally, this
interface does not require DESQview to be loaded. In other
words, if DESQview is not loaded, the application and XDI driver
will still be able to communicate.
Q: When would I want to use the XDI specification?
If your driver needs to write into an application's address space
then you need to ensure that the address is valid when you
perform the write. (e.g., The DOS SETDTA call requires the
caller provide a pointer to a buffer that will be filled in at a
later time. A communications handler might use a similar
interface but perform the update at interrupt time.) With
DESQview, this buffer may get mapped in and out to accomodate
running multiple programs. If your driver attempts to write into
this buffer when DESQview has mapped some other application into
it (e.g., at interrupt time) then you will be corrupting the
unknown application. The XDI allows your driver to determine
when the write operation is safe or specifically request that
DESQview map the application in to allow safe access to the
application's address space.
Another example is the use of Multiplex boards. Multiplex boards
have two important features: One, they provide access to multiple
external devices (e.g., modems) using a single IRQ and two, they
provide a software interface for applications. The software
interface removes the need for the application to manage the
hardware directly. In the case of a multiplex board providing
additional serial ports, the user will often want to run more
than one program at a time to take advantage extra serial ports.
(e.g., A number of BBS systems provide the option for running
multiple copies at once and also support drivers for multiplex
boards.) The programmer writing the driver will need to
accomodate simultaneous access to the driver as well as provide a
reliable software interface.
Other issues addressed by the XDI:
1) Allocation of a software interrupt to allow the application
to communicate with the driver. With more and more device
drivers and TSR's available, it is important to prevent possible
conflicts with other software. The XDI specification uses the
multiplex interrupt (INT 2Fh) as a basis for sharing a single
interrupt using a well defined interface. Once the application
has 'logged' itself with the driver (XDI_RESERVED_SUBFUNC), the
driver might provide an ID for future use or simply manage it
internally based on which process DESQview has mapped in when the
software interrupt is called. This portion of the interface
functions in the same manner whether DESQview is loaded or not.
When DESQview is not present, the driver does not need to be
concerned with the mapping context.
2) Allocation of memory/application that needs to be accessible
at any given time. This might be a buffer for incoming data.
Normally, the driver would need to allocate all of its memory
needs during its initialization code. DESQview allows an XDI
driver to allocate COMMON memory (memory that does not get mapped
out) during an XDI call. This allows the driver to allocate only
the memory necessary when a new application starts. It DESQview
is not present, the application would allocate a buffer out of
its own data space. A check for DESQview would be all that is
necessary for the application to determine whether it needs to
allocate a buffer or allow the driver to allocate it from COMMON
memory.
3) Preventing reentrancy during non-reentrant sections of code.
In a perfect world, all of your driver's code would be reentrant.
Since this may not be practical without unreasonble code or CPU
overhead, the XDI driver can temporarily suspend multitasking to
perform its critical work. This does not mean that the XDI
allows you to write non-reentrant handlers but it can solve some
sticky issues that arise when you need to support simultaneous
access.
4) The application can not keep up with the data rate. There
will be times when the application can not empty the driver's
buffer faster than the driver can fill it. The user may have
started up a few extra applications and the CPU is too slow to
give everyone enough time. The XDI driver could consider some
percentage of the buffer as a threshold. When this threshold is
reached the driver can temporarily override DESQview's dispatcher
and force the application's 'buffer management' routine to
execute at the next context switch.
5) The driver needs to know when the application exits to allow
proper cleanup. Normally, the application itself would call the
driver to initiate cleanup. Occasionally this will not occur
(e.g., the user shut down the application via DESQview's Close
Window menu selection). DESQview notifies the XDI driver when a
process ends to allow the driver to determine if it needs to
perform any cleanup for the process.
There are other areas where an XDI driver would be of use;
resource tracking on a process by process basis, modifying the
.DVP when each process starts, allocating additional system
memory for the process at startup, tracking CPU usage, or even
displacing DESQview's dispatcher.
Q: How do I find out more about the XDI?
DESQview's XDI is fully documented in Quarterdeck's API Reference
Manual (versions 1.20 and later). Included is a sample XDI
driver (POKEXDI.ASM) that can be used as a template for designing
your own. Contact Quarterdeck for information on obtaining a
copy of our API Reference Manual or upgrading and older API
Reference Manual.
Copyright (C) 1991 by Quarterdeck Office Systems
* * * E N D O F F I L E * * *